Simulate COP Deposit (Sandbox)
In sandbox, COP deposits are simulated end-to-end for both rails (PSE and Bre-B) — you do not need to open the PSE link or send a real Bre-B transfer to finish the flow. This page explains how the simulation works so you can run through the full COP → crypto journey without touching real rails.
This behavior is sandbox only. In production the user must open the depositUrl in a browser and complete the actual PSE payment at their Colombian bank for the ticket to move beyond UNPAID.
What happens when you create a COP ticket in sandbox
- Quote + ticket — you call
GET /v2/account/quote/fixed-rateand thenPOST /v2/account/tickets/exactly like in production. The flow is identical from an API consumer perspective. - Deposit URL — the ticket response includes a
depositUrlshaped likehttps://links.avenia.cobre/<uuid>. It is intentionally non-resolving — it exists only to mirror the production response shape. Do not expect it to open a payment page. - Auto-settlement (async) — a background job dispatches the equivalent of a
payin_status_changed = COMPLETEDwebhook straight into the processing pipeline, without waiting for a real PSE payment. - Ticket lifecycle completes — the ticket transitions
UNPAID → PROCESSING → PAID, mock tokens are credited to the specified wallet, and the usualTICKET-CREATED,DEPOSIT-PROCESSING,DEPOSIT-SUCCESS, andTICKET-COMPLETEwebhooks fire, matching production.
Typical end-to-end time: about 70 seconds between ticket creation and PAID (the bulk is the async token-mint step, not the deposit itself).
Amount limits
The simulation fires for COP deposits up to 700,000 COP (roughly equivalent to R$1,000 at current FX). Amounts above that cap are still accepted by the ticket API, but the auto-settlement is skipped — tickets stay UNPAID until manually completed. Keep test amounts under the cap.
Example
1. Quote
curl -X GET "https://api.sandbox.avenia.io:10952/v2/account/quote/fixed-rate?inputCurrency=COP&inputPaymentMethod=BANK-TRANSFER&inputAmount=500000&outputCurrency=USDC&outputPaymentMethod=INTERNAL&inputThirdParty=false&outputThirdParty=false&blockchainSendMethod=PERMIT" \
-H "Authorization: Bearer eyJhdXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
2. Ticket
curl -X POST "https://api.sandbox.avenia.io:10952/v2/account/tickets/" \
-H "Authorization: Bearer eyJhdXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
-H "Content-Type: application/json" \
-d '{
"quoteToken": "eyJhdXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"ticketBlockchainOutput": {
"walletAddress": "0xabcdefabcdefabcdefabcdefabcdefabcdefabcd"
}
}'
Sample response:
{
"id": "e0a5b2f2-c0d7-486c-a3dd-cb32a1715c51",
"depositUrl": "https://links.avenia.cobre/63144f74-52ac-48a8-a25c-7c5491dbbcbf",
"expiration": "2026-05-01T13:26:12.307Z"
}
3. Poll the ticket
Nothing else is required. Poll the ticket until it reports PAID:
curl -X GET "https://api.sandbox.avenia.io:10952/v2/account/tickets/e0a5b2f2-c0d7-486c-a3dd-cb32a1715c51" \
-H "Authorization: Bearer eyJhdXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
You should see the status transition from UNPAID → PROCESSING → PAID within roughly a minute.
Bre-B deposits
Bre-B deposits use the same simulation pipeline. The only API differences are:
- Quote uses
inputPaymentMethod=BRE-Binstead ofBANK-TRANSFER. - Ticket response includes
breBKeyinstead ofdepositUrl. - Ticket expiration is 24 hours (same as PSE).
Example quote:
curl -X GET "https://api.sandbox.avenia.io:10952/v2/account/quote/fixed-rate?inputCurrency=COP&inputPaymentMethod=BRE-B&inputAmount=50000&outputCurrency=USDC&outputPaymentMethod=INTERNAL&inputThirdParty=false&outputThirdParty=false&blockchainSendMethod=PERMIT" \
-H "Authorization: Bearer eyJhdXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
Example ticket response:
{
"id": "bb3a6430-55c5-4c43-9d17-9262cb71e935",
"breBKey": "@CBW0ZWQT6",
"expiration": "2026-05-06T14:08:11.197319Z"
}
In sandbox, the breBKey returned is a fixed test value (e.g. @CBW0ZWQT6). The ticket auto-completes within ~70 seconds, no real Bre-B transfer needed.
Simulating COP payouts
Crypto → COP payouts are simulated for both rails as well:
- PSE — Create the ticket with
outputPaymentMethod=BANK-TRANSFERand a beneficiary registered with bank fields. The ticket reachesPAIDwithin a second. - Bre-B — Create the ticket with
outputPaymentMethod=BRE-Band a beneficiary registered withbreBKey. Same auto-complete behavior.
No real payout is executed and no real COP is sent. Minimum amount remains 5 USDC.
What is not simulated
The following still hit the real staging rails and behave exactly as production would:
- Creating COP beneficiaries (
POST /v2/account/beneficiaries/bank-accounts/cop/) — including Bre-B key validation - Listing supported COP banks (
GET /.../cop/supported-banks) - KYC approval for new accounts
If any of those endpoints return an unexpected error in sandbox, it reflects a real issue with the upstream staging rail — not with the simulation.